package com.ruyuan.rapid.core.netty.processor.filter;

/**
 * 执行过滤器的接口操作
 * @author mac
 */
public interface ProcessorFilter<T> {

    /**
     * 过滤器是否执行的校验
     * @param t
     * @return
     * @throws Throwable
     */
    boolean check(T t) throws Throwable;

    /**
     * 真正执行过滤器的方法
     * @param t
     * @param args
     * @throws Throwable
     */
    void entry(T t, Object... args) throws Throwable;

    /**
     * 触发下一个过滤器的执行
     * @param t
     * @param args
     * @throws Throwable
     */
    void fireNext(T t, Object... args) throws Throwable;

    /**
     * 对象传输的方法
     * @param t
     * @param args
     * @throws Throwable
     */
    void transformEntry(T t, Object... args) throws Throwable;

    /**
     * 过滤器初始化的方法, 如果子类有需求, 则进行覆盖
     * @throws Exception
     */
    default void init() throws Exception {

    }

    /**
     * 销毁的方法
     * @throws Exception
     */
    default void destroy() throws Exception {

    }

    /**
     * 刷新
     * @throws Exception
     */
    default void refresh() throws Exception {

    }
}
